# LeetCode 217、存在重复元素
# 一、题目描述
给你一个整数数组 nums
。如果任一值在数组中出现 至少两次 ,返回 true
;如果数组中每个元素互不相同,返回 false
。
示例 1:
输入:nums = [1,2,3,1]
输出:true
示例 2:
输入:nums = [1,2,3,4]
输出:false
示例 3:
输入:nums = [1,1,1,3,3,4,3,2,4,2]
输出:true
提示:
1 <= nums.length <= 10^5
-10^9 <= nums[i] <= 10^9
# 二、题目解析
# 三、参考代码
# 代码一
哈希集合调API讨巧解法
# 题目:LC217. 存在重复元素
# 难度:简单
# 作者:闭着眼睛学数理化
# 算法:哈希集合调API讨巧解法
# 代码看不懂的地方,请直接在群上提问
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
return (len(set(nums)) != len(nums))
# 由于哈希集合具有不包含重复元素的性质,
# 如果nums列表中存在重复元素,将其转换成哈希集合后长度必然减少
# 所以我们只需要判断set(nums)的长度和nums的长度是否一致即可得到答案
# 如果长度一致,则返回False,说明nums不包含重复元素
# 如果长度不一致,则返回True,说明nums包含重复元素
# 代码二
哈希集合遍历解法
# Java 代码
// 登录 AlgoMooc 官网获取更多算法图解
// https://www.algomooc.com
// 作者:程序员吴师兄
// 微信:wzb_3377
// 代码有看不懂的地方一定要私聊咨询吴师兄呀
// 存在重复元素(LeetCode 217):https://leetcode.cn/problems/contains-duplicate/
class Solution {
public boolean containsDuplicate(int[] nums) {
// 使用数据结构 set 来存放 nums 里面的所有数字
Set<Integer> set = new HashSet<>();
// 遍历数组
for (int num: nums) {
// 如果数字已经存在于 set 中,直接返回 true
if (set.contains(num)) {
return true;
}
// 把元素添加到 set 中
set.add(num);
}
// 如果成功遍历完数组,则表示没有重复元素,返回 false
return false;
}
}
# C++ 代码
class Solution {
public:
bool containsDuplicate(vector<int>& nums) {
// 使用数据结构 unordered_set 来存放 nums 里面的所有数字
unordered_set<int> s;
// 遍历数组
for (int x: nums) {
// 如果数字已经存在于 set 中,直接返回 true
if (s.find(x) != s.end()) {
return true;
}
// 把元素添加到 set 中
s.insert(x);
}
// 如果成功遍历完数组,则表示没有重复元素,返回 false
return false;
}
};
# Python 代码
class Solution:
def containsDuplicate(self, nums: List[int]) -> bool:
# 使用数据结构 set 来存放 nums 里面的所有数字
pre = set()
# 遍历数组
for num in nums:
# 如果数字已经存在于 set 中,直接返回 true
if num in pre:
return True
# 把元素添加到 set 中
pre.add(num)
# 如果成功遍历完数组,则表示没有重复元素,返回 false
return False